SQL分组取最大值的方法 |
您所在的位置:网站首页 › sql重复字段只显示一条 有并列条件怎么办 › SQL分组取最大值的方法 |
写这篇博文是为了帮助遇到同样问题的人,希望对你有用~ 问题:求怎么查出同一课程id中时间最大的记录?(如下图所示) 1、刚开始想通过group by 分组课程id, 然后获取最大值,如下: SELECT MAX(l.learn_time) FROM learn l where l.user_id = '14201109' GROUP BY l.course_id查出来结果如下: 但是我想要查出来所有的字段,于是select后面加上 learn.*,嗯,应该没问题了,如下: SELECT MAX(l.learn_time), l.* FROM learn l where l.user_id = '14201109' GROUP BY l.course_id但查出来的结果出乎我的意料,你是不是也没想到,两列的时间字段竟然不一样!!! 由此想 MAX(l.learn_time)最大时间 应该是和 后面的learn.*记录没有直接关系的。 一开始是这样想的,通过时间逆排序, select learn.* from learn where learn.user_id = '14201109' ORDER BY learn.learn_time DESC然后在通过课程id分组应该就可以获取到了,但是排序order by必须放在分组group by 之后,像下面这样 select learn.* from learn where learn.user_id = '14201109' GROUP BY course_id ORDER BY learn.learn_time DESC结果发现learn_id 是1和6,通过group by分组之后它就只能取到的是这两条,这两条记录恰恰是时间最小的,而我们想要的是learn_id 为5和9的最大时间,经过这一番折磨,实在不知道怎么解决了,发了个求救信息,不一会儿,在同学的帮助下,就解决了只个问题,其实刚开始的思路是对的,就是先查到最大时间,再外边嵌套查询就好了,如下: 正确答案: SELECT * from learn where learn.learn_time in ( SELECT MAX(l.learn_time) FROM learn l where l.user_id = '14201109' GROUP BY l.course_id )其实刚开始我也这样想过,但是我是把in写的等号“=”,结果一直报错说内嵌套只能查出来一条记录才可以,当时脑子短路,咋就没想到用in【/捂脸】【/捂脸】【/捂脸】,希望你们不要像我一样犯同样的错误。 突然想起来忘了说,我用的是mysql数据库 最后,大家如果发现我写的有错误的话,欢迎评论指出哦,共同进步。觉得我写的不错的,可以关注下哦^v^ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |